package org.zch.common.unit;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;


/**
 * WebFilter注解：需要过滤的参数接口，以数组形式写入多个接口
 * @author 刘新
 * @create 2024/5/28 上午8:39
 */
//@WebFilter(urlPatterns = {"/userData/getUserBean", "/userData/setUserLaoNumByCode"})
public class SafeFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }

    /**
     * 过滤器核心处理逻辑
     *
     * @param request  客户端发送给服务器的请求。它包含了请求的所有信息，如请求方法、URL、请求头等
     * @param response 服务器返回给客户端的响应。它包含了响应的所有信息，如状态码、响应头、响应体等
     * @param chain    过滤器链。当一个过滤器处理完请求后，它会将请求传递给下一个过滤器进行处理。
     *                 通过调用 chain.doFilter(request, response) 方法，可以将请求传递给下一个过滤器
     * @throws IOException
     * @throws ServletException
     */
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // ServletRequest接口实现类,专门用于处理 HTTP 请求。可通过方法来获取HTTP请求的详细信息，如请求方法、URL、请求头等
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        String requestUrl = httpRequest.getRequestURL().toString();
        System.out.println("过滤器获取的请求 URL：" + requestUrl);
        // 获取加密信息进行解密
        String timeToken = httpRequest.getHeader("timeToken");
        if (null == timeToken){
            throw new ServletException("请求参数错误");
        }
        System.out.println("timeToken: " + timeToken);

        // 请求传递给下一个过滤器进行处理
        chain.doFilter(request, response);
    }

    @Override
    public void destroy() {
    }
}
